package wzmSteuerung;

import java.io.IOException;
import java.io.InputStream;

import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;

class Empfaenger implements SerialPortEventListener {
	
	InputStream inputStream;
	Maschine maschine;
	SerialPort serialPort;
	
	public void setEmpfaenger(Maschine m, SerialPort p)
	{
		this.maschine = m;
		this.serialPort = p;
		
		try {
			inputStream = serialPort.getInputStream();
		} catch (IOException e) 
		{
			System.out.println("Keinen Zugriff auf InputStream");
		}
		
	}
	
	public void serialEvent(SerialPortEvent event) {
		System.out.println("serialPortEventlistener");
		switch (event.getEventType()) {
		case SerialPortEvent.DATA_AVAILABLE:
			serialPortDatenVerfuegbar();
			break;
		case SerialPortEvent.BI:
			maschine.rueckmeldung = "BI";
		case SerialPortEvent.CD:
			maschine.rueckmeldung = "CD";
		case SerialPortEvent.CTS:
			maschine.rueckmeldung = "CTS";
		case SerialPortEvent.DSR:
			maschine.rueckmeldung = "DSR";
		case SerialPortEvent.FE:
			maschine.rueckmeldung = "FE";
		case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
			maschine.rueckmeldung = "OUTPUT_BUFFER_EMPTY";
		case SerialPortEvent.PE:
			maschine.rueckmeldung = "PE";
		case SerialPortEvent.RI:
			maschine.rueckmeldung = "Ri";
		default:
			maschine.rueckmeldung = "default";
		}
	}
	
	void serialPortDatenVerfuegbar()  {
		
		byte[] data = new byte[150];
		int num;
		try {
			while(inputStream.available() > 0) 
			{
				/* Sleep ist hier wegen der Latenz in der die Maschine sendet ca. 104ms */
				try {
					Thread.sleep(104);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				num = inputStream.read(data, 0, data.length);
				maschine.rueckmeldung = new String(data, 0, num);
				synchronized(maschine){
				maschine.notify();
				}
				System.out.println("maschinerueckmeldeung im empf: "+ maschine.rueckmeldung);
			}
		} catch (IOException e) {
			System.out.println("Fehler beim Lesen empfangener Daten");
		}
	}

}